#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
//int main()
//{
//	char* c[] = { "ENTER","NEW","POINT","FIRST" };
//	char** cp[] = { c + 3,c + 2,c + 1,c };
//	char*** cpp = cp;
//	printf("%s\n", **++cpp);
//	printf("%s\n", *-- * ++cpp + 3);
//	printf("%s\n", *cpp[-2] + 3);
//	printf("%s\n", cpp[-1][-1] + 1);
//	return 0;
//}

//int my_strlen(const char* s)
//{
//	assert(s);
//
//	int count = 0;
//	while (*s++)
//		count++;
//	return count;
//}

//char* my_strcpy(char* dest, const char* src)
//{
//	assert(dest && src);
//
//	char* s = dest;
//	while (*dest++ = *src++)
//		;
//	return s;
//}


//int main()
//{
//	printf("%d\n", sizeof(void*));
//	return 0;
//}

//char* my_strcat(char* dest, const char*src)
//{
//	assert(dest && src);
//
//	const char* p = dest;
//	while (*dest++)
//		;
//	dest--;
//	while (*dest++ = *src++)
//		;
//	return p;
//}

//int my_strcmp(const char* s1, const char* s2)
//{
//	assert(s1 && s2);
//
//	while (*s1 == *s2)
//	{
//		if (*s2 == '\0')
//			return 0;
//		s1++;
//		s2++;
//	}
//	return *s1 - *s2;
//}
//
//int main()
//{
//	printf("%d\n", my_strcmp("ab2", "abc"));
//	return 0;
//}

//char* my_strstr(const char* s1, const char* s2)
//{
//	char* str1 = NULL;
//	char* str2 = NULL;
//	char* p = (char*)s1;
//	if (*s2 == '\0')
//		return p;
//	while (*p)
//	{
//		str1 = p;
//		str2 = s2;
//		while (*s1 && *s2 &&*str1 == *str2)
//		{
//			str1++;
//			str2++;
//		}
//		if (*str2 == '\0')
//			return *p;
//		p++;
//	}
//	return NULL;
//}

//#include <stdio.h>
//#include <assert.h>
//
//int my_strlen1(const char* s)
//{
//	assert(s);
//
//	int count = 0;
//	while (*s++)
//		count++;
//	return count;
//}
//int my_strlen2(const char* s)
//{
//	assert(s);
//
//	char* tmp = s;
//	while (*s++)
//		;
//	return s - tmp - 1;
//}
//
//int my_strlen3(const char* s)
//{
//	assert(s);
//
//	if (*s)
//		return 1 + my_strlen3(s + 1);
//	else
//		return 0;
//}
//
//int main()
//{
//	char s[] = "hello world";
//	printf("%d\n", my_strlen1(s));
//	printf("%d\n", my_strlen2(s));
//	printf("%d\n", my_strlen3(s));
//	return 0;
//}

//#include <stdio.h>
//#include <assert.h>
//char* my_strcpy(char* dest, const  char* src)
//{
//	assert(dest && src);
//
//	char* tmp = dest;
//	while (*dest++ = *src++)
//		;
//	return tmp;
//}
//
//int main()
//{
//	char s[20] = { 0 };
//	char a[] = "hello world";
//	printf("%s\n", my_strcpy(s, a));
//	return 0;
//}

//#include <stdio.h>
//#include <assert.h>
//int my_strcmp(const char* s1, const  char* s2)
//{
//	assert(s1 && s2);
//
//	while(*s1 == *s2)
//	{
//		if (*s2 == '\0')
//			return 0;
//		s1++;
//		s2++;
//	}
//	return *s1 - *s2;
//}
//
//int main()
//{
//	char s[] = "abcde";
//	char a[] = "hello world";
//	printf("%d\n", my_strcmp(s, a));
//	return 0;
//}

//#include <stdio.h>
//#include <assert.h>
//char* my_strcat(char* dest, const  char* src)
//{
//	assert(dest && src);
//
//	char* tmp = dest;
//	while (*dest++)
//		;
//	dest--;
//	while (*dest++ = *src++)
//		;
//	return tmp;
//}
//
//int main()
//{
//	char s[20] = "hello ";
//	char a[] = "world";
//	printf("%s\n", my_strcat(s, a));
//	return 0;
//}

//#include <stdio.h>
//#include <assert.h>
//char* my_strstr(const char* s1, const char* s2)
//{
//	assert(s1 && s2);
//
//	if (*s2 == '\0')
//		return (char*)s1;
//	char* str1 = NULL;
//	char* str2 = NULL;
//	char* p = (char*)s1;
//	while (*p)
//	{
//		str1 = p;
//		str2 = (char*)s2;
//		while (*str1 && *str2 && *str1 == *str2)
//		{
//			str1++;
//			str2++;
//		}
//		if (*str2 == '\0')
//			return p;
//		p++;
//	}
//	return NULL;
//}
//
//int main()
//{
//	char s[] = "abbbcdef";
//	char a[] = "bcd";
//	printf("%s\n", my_strstr(s, a));
//	return 0;
//}

